home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 019 / tb.arc / TB.PAS < prev   
Pascal/Delphi Source File  |  1986-08-06  |  17KB  |  593 lines

  1. Program TempBeauty;
  2.  
  3. { Original concept and program by Manny Ho    - June 1986
  4.   Modified                     by Sukwoon Noh - August 1986 }
  5. Type
  6.    Str255 = String[255];
  7.    ImageType = Array [1..4096] of Char;
  8.    WindImType = Record
  9.                    X1, Y1, X2, Y2 : Integer;
  10.                 End;
  11.  
  12. Var
  13.    Copies, TMargin, LMargin, RMargin : Integer;
  14.    CopiesStr, TMarginStr, LMarginStr, RMarginStr : String[127];
  15.    Choice : Char;
  16.  
  17.    Win : Record
  18.             Dim : WindImType;
  19.             Depth : Integer;
  20.             Stack : Array[1..5] of record
  21.                        Image : ImageType;
  22.                        Dim : WindImType;
  23.                        X, Y : Integer;
  24.                     End
  25.          End;
  26.    CrtMode : Byte Absolute $0040:$0049;
  27.    CrtWidth : Byte Absolute $0040:$004A;
  28.    MonoBuffer : ImageType Absolute $B000:$0000;
  29.    ColorBuffer : ImageType Absolute $B800:$0000;
  30.    Ch : Char;
  31.  
  32.  
  33. Procedure InitWin;
  34. Begin
  35.    With Win.Dim do
  36.       Begin X1 := 1; Y1 := 1; X2 := CrtWidth; Y2 := 25 End;
  37.    Win.Depth := 0
  38. End;
  39.  
  40. Procedure BoxWin(X1, Y1, X2, Y2 : Integer);
  41. Var
  42.    X, Y : Integer;
  43. Begin
  44.    Window(1,1,80,25);
  45.  
  46.    GotoXY(X1,Y1); Write(Chr(218));
  47.    For X := X1+1 to X2-1 do Write(Chr(196));
  48.    Write(Chr(191));
  49.  
  50.    For Y := Y1+1 to Y2-1 do Begin
  51.       GotoXY(X1,Y);
  52.       Write(Chr(179),' ':X2-X1-1,Chr(179))
  53.    End;
  54.  
  55.    GotoXY(X1,Y2); Write(Chr(192));
  56.    For X := X1+1 to X2-1 do Write(Chr(196));
  57.    Write(Chr(217));
  58.  
  59.    Window(X1+1,Y1+1,X2-1,Y2-1);
  60.    GotoXY(1,1);
  61. End;
  62.  
  63. Procedure MkWin(X1,Y1,X2,Y2 : Integer);
  64. Begin
  65.    With Win do Depth := Depth+1;
  66.    If Win.Depth > 5 then Begin
  67.       Writeln(^G,' Windows nested too deep ');
  68.       Halt
  69.    End;
  70.  
  71.    If CrtMode = 7 then Win.Stack[Win.Depth].Image := MonoBuffer
  72.    Else Win.Stack[Win.Depth].Image := ColorBuffer;
  73.  
  74.    Win.Stack[Win.Depth].Dim := Win.Dim;
  75.    Win.Stack[Win.Depth].X := WhereX;
  76.    Win.Stack[Win.Depth].Y := WhereY;
  77.  
  78.    BoxWin(X1,Y1,X2,Y2);
  79.  
  80.    Win.Dim.X1 := X1+1;
  81.    Win.Dim.Y1 := Y1+1;
  82.    Win.Dim.X2 := X2-1;
  83.    Win.Dim.Y2 := Y2-1;
  84. End;
  85.  
  86. Procedure RmWin;
  87. Begin
  88.    If CrtMode = 7 then MonoBuffer := Win.Stack[Win.Depth].Image
  89.    Else ColorBuffer := Win.Stack[Win.Depth].Image;
  90.    With Win do Begin
  91.       Dim := Stack[Depth].Dim;
  92.       Window(Dim.X1,Dim.Y1,Dim.X2,Dim.Y2);
  93.       GotoXY(Stack[Depth].X,Stack[Depth].Y);
  94.      Depth := Depth-1;
  95.    End
  96. End;
  97.  
  98. Procedure DoOrientation;
  99. Begin
  100.    MkWin(10,3,35,7);
  101.    Writeln('A.  Portrait');
  102.    Writeln('B.  Landscape');
  103.    Read(Kbd,Choice);
  104.    Case Upcase(Choice) of
  105.             'A' : Write(Lst,Chr(27),'&l0O');
  106.             'B' : Write(Lst,Chr(27),'&l1O');
  107.             'C' : Write(^G);
  108.             'D' : Write(^G);
  109.             'E' : Write(^G);
  110.             'F' : Write(^G);
  111.             'G' : Write(^G);
  112.             'H' : Write(^G);
  113.             'I' : Write(^G);
  114.             'J' : Write(^G);
  115.             'K' : Write(^G);
  116.             'L' : Write(^G);
  117.             'M' : Write(^G);
  118.             'N' : Write(^G);
  119.             'O' : Write(^G);
  120.             'P' : Write(^G);
  121.             'Q' : Write(^G);
  122.             'R' : Write(^G);
  123.             'S' : Write(^G);
  124.             'T' : Write(^G);
  125.             'U' : Write(^G);
  126.             'V' : Write(^G);
  127.             'W' : Write(^G);
  128.             'X' : Write(^G);
  129.             'Y' : Write(^G);
  130.             'Z' : Write(^G);
  131.    End;
  132.    RmWin;
  133. End;
  134.  
  135. Procedure DoTypeFace;
  136. Begin
  137.    MkWin(10,3,35,14);
  138.    Writeln('A.  Line Printer');
  139.    Writeln('B.  Courier');
  140.    Writeln('C.  Helv');
  141.    Writeln('D.  Tms Roman');
  142.    Writeln('E.  Gothic');
  143.    Writeln('F.  Prestige');
  144.    Read(Kbd,Choice);
  145.    Case Upcase(Choice) of
  146.             'A' : Write(Lst,Chr(27),'(8U',Chr(27),'(s0p16.66h8.5v0T');
  147.             'B' : Write(Lst,Chr(27),'(8U',Chr(27),'(s0p10h12v3T');
  148.             'C' : Write(Lst,Chr(27),'(0U',Chr(27),'(s1p14.4v4T');
  149.             'D' : Write(Lst,Chr(27),'(0U',Chr(27),'(s1p10v5T');
  150.             'E' : Write(Lst,Chr(27),'(8U',Chr(27),'(s0p12h12v6T');
  151.             'F' : Write(Lst,Chr(27),'(8U',Chr(27),'(s0p12h10v8T');
  152.             'G' : Write(^G);
  153.             'H' : Write(^G);
  154.             'I' : Write(^G);
  155.             'J' : Write(^G);
  156.             'K' : Write(^G);
  157.             'L' : Write(^G);
  158.             'M' : Write(^G);
  159.             'N' : Write(^G);
  160.             'O' : Write(^G);
  161.             'P' : Write(^G);
  162.             'Q' : Write(^G);
  163.             'R' : Write(^G);
  164.             'S' : Write(^G);
  165.             'T' : Write(^G);
  166.             'U' : Write(^G);
  167.             'V' : Write(^G);
  168.             'W' : Write(^G);
  169.             'X' : Write(^G);
  170.             'Y' : Write(^G);
  171.             'Z' : Write(^G);
  172.    End;
  173.    RmWin;
  174. End;
  175.  
  176. Procedure DoWeight;
  177. Begin
  178.    MkWin(10,3,35,8);
  179.    Writeln('A.  Bold');
  180.    Writeln('B.  Medium');
  181.    Writeln('C.  Light');
  182.    Read(Kbd,Choice);
  183.    Case Upcase(Choice) of
  184.             'A' : Write(Lst,Chr(27),'(s4B');
  185.             'B' : Write(Lst,Chr(27),'(s0B');
  186.             'C' : Write(Lst,Chr(27),'(s-4B');
  187.             'D' : Write(^G);
  188.             'E' : Write(^G);
  189.             'F' : Write(^G);
  190.             'G' : Write(^G);
  191.             'H' : Write(^G);
  192.             'I' : Write(^G);
  193.             'J' : Write(^G);
  194.             'K' : Write(^G);
  195.             'L' : Write(^G);
  196.             'M' : Write(^G);
  197.             'N' : Write(^G);
  198.             'O' : Write(^G);
  199.             'P' : Write(^G);
  200.             'Q' : Write(^G);
  201.             'R' : Write(^G);
  202.             'S' : Write(^G);
  203.             'T' : Write(^G);
  204.             'U' : Write(^G);
  205.             'V' : Write(^G);
  206.             'W' : Write(^G);
  207.             'X' : Write(^G);
  208.             'Y' : Write(^G);
  209.             'Z' : Write(^G);
  210.    End;
  211.    RmWin;
  212. End;
  213.  
  214. Procedure DoStyle;
  215. Begin
  216.    MkWin(10,3,35,7);
  217.    Writeln('A. Upright ');
  218.    Writeln('B. Italic ');
  219.    Read(Kbd,Choice);
  220.    Case Upcase(Choice) of
  221.             'A' : Write(Lst,Chr(27),'(s0S');
  222.             'B' : Write(Lst,Chr(27),'(s1S');
  223.             'C' : Write(^G);
  224.             'D' : Write(^G);
  225.             'E' : Write(^G);
  226.             'F' : Write(^G);
  227.             'G' : Write(^G);
  228.             'H' : Write(^G);
  229.             'I' : Write(^G);
  230.             'J' : Write(^G);
  231.             'K' : Write(^G);
  232.             'L' : Write(^G);
  233.             'M' : Write(^G);
  234.             'N' : Write(^G);
  235.             'O' : Write(^G);
  236.             'P' : Write(^G);
  237.             'Q' : Write(^G);
  238.             'R' : Write(^G);
  239.             'S' : Write(^G);
  240.             'T' : Write(^G);
  241.             'U' : Write(^G);
  242.             'V' : Write(^G);
  243.             'W' : Write(^G);
  244.             'X' : Write(^G);
  245.             'Y' : Write(^G);
  246.             'Z' : Write(^G);
  247.    End;
  248.    RmWin;
  249. End;
  250.  
  251. Procedure DoPaperSize;
  252. Begin
  253.    MkWin(10,3,35,7);
  254.    Writeln('A.  Regular');
  255.    Writeln('B.  Legal');
  256.    Read(Kbd,Choice);
  257.    Case Upcase(Choice) of
  258.             'A' : Write(Lst,Chr(27),'&l66P');
  259.             'B' : Write(Lst,Chr(27),'&l84P');
  260.             'C' : Write(^G);
  261.             'D' : Write(^G);
  262.             'E' : Write(^G);
  263.             'F' : Write(^G);
  264.             'G' : Write(^G);
  265.             'H' : Write(^G);
  266.             'I' : Write(^G);
  267.             'J' : Write(^G);
  268.             'K' : Write(^G);
  269.             'L' : Write(^G);
  270.             'M' : Write(^G);
  271.             'N' : Write(^G);
  272.             'O' : Write(^G);
  273.             'P' : Write(^G);
  274.             'Q' : Write(^G);
  275.             'R' : Write(^G);
  276.             'S' : Write(^G);
  277.             'T' : Write(^G);
  278.             'U' : Write(^G);
  279.             'V' : Write(^G);
  280.             'W' : Write(^G);
  281.             'X' : Write(^G);
  282.             'Y' : Write(^G);
  283.             'Z' : Write(^G);
  284.    End;
  285.    RmWin;
  286. End;
  287.  
  288. Procedure DoLPI;
  289. Begin
  290.    MkWin(10,3,35,7);
  291.    Writeln('A.  6 LPI');
  292.    Writeln('B.  8 LPI');
  293.    Read(Kbd,Choice);
  294.    Case Upcase(Choice) of
  295.             'A' : Write(Lst,Chr(27),'&l6D');
  296.             'B' : Write(Lst,Chr(27),'&l8D');
  297.             'C' : Write(^G);
  298.             'D' : Write(^G);
  299.             'E' : Write(^G);
  300.             'F' : Write(^G);
  301.             'G' : Write(^G);
  302.             'H' : Write(^G);
  303.             'I' : Write(^G);
  304.             'J' : Write(^G);
  305.             'K' : Write(^G);
  306.             'L' : Write(^G);
  307.             'M' : Write(^G);
  308.             'N' : Write(^G);
  309.             'O' : Write(^G);
  310.             'P' : Write(^G);
  311.             'Q' : Write(^G);
  312.             'R' : Write(^G);
  313.             'S' : Write(^G);
  314.             'T' : Write(^G);
  315.             'U' : Write(^G);
  316.             'V' : Write(^G);
  317.             'W' : Write(^G);
  318.             'X' : Write(^G);
  319.             'Y' : Write(^G);
  320.             'Z' : Write(^G);
  321.    End;
  322.    RmWin;
  323. End;
  324.  
  325. Procedure DoPaperInput;
  326. Begin
  327.    MkWin(10,3,35,8);
  328.    Writeln('A.  Eject current page');
  329.    Writeln('B.  Cassette tray');
  330.    Writeln('C.  Manual slot');
  331.    Read(Kbd,Choice);
  332.    Case Upcase(Choice) of
  333.             'A' : Write(Lst,Chr(27),'&l0H');
  334.             'B' : Write(Lst,Chr(27),'&l1H');
  335.             'C' : Write(Lst,Chr(27),'&l2H');
  336.             'D' : Write(^G);
  337.             'E' : Write(^G);
  338.             'F' : Write(^G);
  339.             'G' : Write(^G);
  340.             'H' : Write(^G);
  341.             'I' : Write(^G);
  342.             'J' : Write(^G);
  343.             'K' : Write(^G);
  344.             'L' : Write(^G);
  345.             'M' : Write(^G);
  346.             'N' : Write(^G);
  347.             'O' : Write(^G);
  348.             'P' : Write(^G);
  349.             'Q' : Write(^G);
  350.             'R' : Write(^G);
  351.             'S' : Write(^G);
  352.             'T' : Write(^G);
  353.             'U' : Write(^G);
  354.             'V' : Write(^G);
  355.             'W' : Write(^G);
  356.             'X' : Write(^G);
  357.             'Y' : Write(^G);
  358.             'Z' : Write(^G);
  359.    End;
  360.    RmWin;
  361. End;
  362.  
  363. Procedure DoUnderLine;
  364. Begin
  365.    MkWin(10,3,35,7);
  366.    Writeln('A.  Turn on');
  367.    Writeln('B.  Turn off');
  368.    Read(Kbd,Choice);
  369.    Case Upcase(Choice) of
  370.             'A' : Write(Lst,Chr(27),'&dD');
  371.             'B' : Write(Lst,Chr(27),'&d@');
  372.             'C' : Write(^G);
  373.             'D' : Write(^G);
  374.             'E' : Write(^G);
  375.             'F' : Write(^G);
  376.             'G' : Write(^G);
  377.             'H' : Write(^G);
  378.             'I' : Write(^G);
  379.             'J' : Write(^G);
  380.             'K' : Write(^G);
  381.             'L' : Write(^G);
  382.             'M' : Write(^G);
  383.             'N' : Write(^G);
  384.             'O' : Write(^G);
  385.             'P' : Write(^G);
  386.             'Q' : Write(^G);
  387.             'R' : Write(^G);
  388.             'S' : Write(^G);
  389.             'T' : Write(^G);
  390.             'U' : Write(^G);
  391.             'V' : Write(^G);
  392.             'W' : Write(^G);
  393.             'X' : Write(^G);
  394.             'Y' : Write(^G);
  395.             'Z' : Write(^G);
  396.    End;
  397.    RmWin;
  398. End;
  399.  
  400. Procedure DoMargins;
  401. Begin
  402.    MkWin(10,3,40,8);
  403.    TMarginStr := ''; LMarginStr := ''; RMarginStr := '';
  404.    TMargin := 2; LMargin := 0; RMargin := 240;
  405.    Write('Top Margin (2)     : ');
  406.    GotoXY(30,4); Read(TMargin); Str(TMargin,TMarginStr); Writeln;
  407.    Write('Left Margin (0)    : ');
  408.    GotoXY(30,5); Read(LMargin); Str(LMargin,LMarginStr); Writeln;
  409.    Write('Right Margin (240) : ');
  410.    GotoXY(30,6); Read(RMargin); Str(RMargin,RMarginStr);
  411.  
  412.    TMarginStr := Chr(27) + '&l' + TMarginStr + 'E';
  413.    LMarginStr := Chr(27) + '&a' + LMarginStr + 'L';
  414.    RMarginStr := Chr(27) + '&a' + RMarginStr + 'M';
  415.    Write(Lst,TMarginStr);
  416.    Write(Lst,LMarginStr);
  417.    Write(Lst,RMarginStr);
  418.  
  419.    RmWin;
  420. End;
  421.  
  422. Procedure DoWrap;
  423. Begin
  424.    MkWin(10,3,35,7);
  425.    Writeln('A.  Turn on');
  426.    Writeln('B.  Turn off');
  427.    Read(Kbd,Choice);
  428.    Case Upcase(Choice) of
  429.             'A' : Write(Lst,Chr(27),'&s0C');
  430.             'B' : Write(Lst,Chr(27),'&s1C');
  431.             'C' : Write(^G);
  432.             'D' : Write(^G);
  433.             'E' : Write(^G);
  434.             'F' : Write(^G);
  435.             'G' : Write(^G);
  436.             'H' : Write(^G);
  437.             'I' : Write(^G);
  438.             'J' : Write(^G);
  439.             'K' : Write(^G);
  440.             'L' : Write(^G);
  441.             'M' : Write(^G);
  442.             'N' : Write(^G);
  443.             'O' : Write(^G);
  444.             'P' : Write(^G);
  445.             'Q' : Write(^G);
  446.             'R' : Write(^G);
  447.             'S' : Write(^G);
  448.             'T' : Write(^G);
  449.             'U' : Write(^G);
  450.             'V' : Write(^G);
  451.             'W' : Write(^G);
  452.             'X' : Write(^G);
  453.             'Y' : Write(^G);
  454.             'Z' : Write(^G);
  455.    End;
  456.    RmWin;
  457. End;
  458.  
  459. Procedure DoNoCopies;
  460. Begin
  461.    MkWin(10,3,40,6); Copies := 1; CopiesStr := '';
  462.    Write('Number of copies (1-99) : '); Read(Copies); Str(Copies,CopiesStr);
  463.    CopiesStr := Chr(27) + '&l' + CopiesStr + 'X';
  464.    Write(Lst,CopiesStr);
  465.  
  466.    RmWin;
  467. End;
  468.  
  469. Procedure Lotus_I;
  470. Begin
  471.    MkWin(10,3,58,12);
  472.    Writeln('A.  Landscape/compressed, 176 col, 45 lines');
  473.    Writeln('B.  Landscape/compressed, 176 col, 66 lines');
  474.    Writeln('C.  Landscape/normal,     106 col, 45 lines');
  475.    Writeln('D.  Landscape/normal,     106 col, 66 lines');
  476.    Writeln('E.  Portrait /compressed, 132 col, 60 lines');
  477.    Writeln('F.  Portrait /compressed, 132 col, 89 lines');
  478.    Writeln('G.  Portrait /normal,      80 col, 66 lines');
  479.    Read(Kbd,Choice);
  480.    Case Upcase(Choice) of
  481.             'A' : Write(Lst,Chr(27),'&l1O',Chr(27),'&k2S');
  482.             'B' : Write(Lst,Chr(27),'&l1o2e5.647c66F',Chr(27),'&k2S');
  483.             'C' : Write(Lst,Chr(27),'&l1O');
  484.             'D' : Write(Lst,Chr(27),'&l1o2e5.647c66F');
  485.             'E' : Write(Lst,Chr(27),'&k2S');
  486.             'F' : Write(Lst,Chr(27),'&l2e5.647c89F',Chr(27),'&k2S');
  487.             'G' : Write(Lst,Chr(27),'&l14c1e7.64c66F');
  488.             'H' : Write(^G);
  489.             'I' : Write(^G);
  490.             'J' : Write(^G);
  491.             'K' : Write(^G);
  492.             'L' : Write(^G);
  493.             'M' : Write(^G);
  494.             'N' : Write(^G);
  495.             'O' : Write(^G);
  496.             'P' : Write(^G);
  497.             'Q' : Write(^G);
  498.             'R' : Write(^G);
  499.             'S' : Write(^G);
  500.             'T' : Write(^G);
  501.             'U' : Write(^G);
  502.             'V' : Write(^G);
  503.             'W' : Write(^G);
  504.             'X' : Write(^G);
  505.             'Y' : Write(^G);
  506.             'Z' : Write(^G);
  507.    End;
  508.    RmWin;
  509. End;
  510.  
  511. Procedure Lotus_II;
  512. Begin
  513.    MkWin(10,3,58,9);
  514.    Writeln('A.  Landscape/compressed, 136 col, 45 lines');
  515.    Writeln('B.  Landscape/compressed, 136 col, 66 lines');
  516.    Writeln('C.  Landscape/normal,     136 col, 45 lines');
  517.    Writeln('D.  Landscape/normal,     106 col, 66 lines');
  518.    Read(Kbd,Choice);
  519.    Case Upcase(Choice) of
  520.             'A' : Write(Lst,Chr(27),'&l84p1h1O',Chr(27),'&k2S');
  521.             'B' : Write(Lst,Chr(27),'&l84p1h1o2e5.647c66F',Chr(27),'&k2S');
  522.             'C' : Write(Lst,Chr(27),'&l84p1h1O');
  523.             'D' : Write(Lst,Chr(27),'&l84p1h1o2e5.647c66F');
  524.             'E' : Write(^G);
  525.             'F' : Write(^G);
  526.             'G' : Write(^G);
  527.             'H' : Write(^G);
  528.             'I' : Write(^G);
  529.             'J' : Write(^G);
  530.             'K' : Write(^G);
  531.             'L' : Write(^G);
  532.             'M' : Write(^G);
  533.             'N' : Write(^G);
  534.             'O' : Write(^G);
  535.             'P' : Write(^G);
  536.             'Q' : Write(^G);
  537.             'R' : Write(^G);
  538.             'S' : Write(^G);
  539.             'T' : Write(^G);
  540.             'U' : Write(^G);
  541.             'V' : Write(^G);
  542.             'W' : Write(^G);
  543.             'X' : Write(^G);
  544.             'Y' : Write(^G);
  545.             'Z' : Write(^G);
  546.    End;
  547.    RmWin;
  548. End;
  549.  
  550. Begin
  551.    ClrScr; InitWin; Write(Lst,Chr(27),'E');
  552.    Writeln('╔═══════════════════════════════════════╗');
  553.    Writeln('║ tay! Temporary Beauty (release 2.0) ║');
  554.    Writeln('╠═══════════════════╦═══════════════════╣');
  555.    Writeln('║ A.  Orientation   ║ G.  Paper Input   ║');
  556.    Writeln('║ B.  Type Face     ║ H.  Underline     ║');
  557.    Writeln('║ C.  Weight        ║ I.  Margins       ║');
  558.    Writeln('║ D.  Style         ║ J.  Wrap Lines    ║');
  559.    Writeln('║ E.  Paper Size    ║ K.  Number of     ║');
  560.    Writeln('║ F.  LPI           ║     Copies        ║');
  561.    Writeln('╠═══════════════════╩═══════════════════╣');
  562.    Writeln('║ L.  Lotus Option  I - Regular Size    ║');
  563.    Writeln('║ M.  Lotus Option II - Legal Size      ║');
  564.    Writeln('╠═══════════════════════════════════════╣');
  565.    Writeln('║ R.  Reset the Printer                 ║');
  566.    Writeln('║ <CTRL><F> Form Feed                   ║');
  567.    Writeln('╠═══════════════════════════════════════╣');
  568.    Writeln('║ Enter desired option (ESC to quit)    ║');
  569.    Writeln('╚═══════════════════════════════════════╝');
  570.    Repeat
  571.    Repeat
  572.       GotoXY(WhereX,WhereY); Read(Kbd,Choice);
  573.    Until (Upcase(Choice) in ['A'..'R',#27]);
  574.  
  575.    Case Upcase(Choice) of
  576.          'A' : DoOrientation;
  577.          'B' : DoTypeFace;
  578.          'C' : DoWeight;
  579.          'D' : DoStyle;
  580.          'E' : DoPaperSize;
  581.          'F' : DoLPI;
  582.          'G' : DoPaperInput;
  583.          'H' : DoUnderLine;
  584.          'I' : DoMargins;
  585.          'J' : DoWrap;
  586.          'K' : DoNoCopies;
  587.          'L' : Lotus_I;
  588.          'M' : Lotus_II;
  589.          'R' : Write(Lst,Chr(27),'E');
  590.     {    'X' : Write(Lst,Chr(12));  }
  591.       End;
  592.    Until (Upcase(Choice) in [#27]);
  593. End.